#define M 3
#define MAX_KEYS (M - 1)
#define MIN_KEYS (M / 2)

typedef struct  
{
    int is_leaf;
    int key_count;
    int keys[M];
    struct BPlusTreeNode *children_ptr[M + 1];
    void *data_ptr[M];
    struct BPlusTreeNode *next_ptr;
    struct BPlusTreeNode *prev_ptr;
} BPlusTreeNode;

typedef struct 
{
    BPlusTreeNode *root;
    BPlusTreeNode *first_leaf;
} BPlusTree;

BPlusTree* create_tree();